refactor(firestore): pipeline native gap analysis remediation#9086
Conversation
|
Currently stuck on a tough queue item, these are pretty chewy problems (or they wouldn't have happened in the first place!) so it still has a little ways to go. |
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request addresses critical platform parity gaps between Android and iOS for Firestore Pipelines. It implements several remediation phases focused on operand coercion, constant lowering, and expression handling, while simultaneously expanding test coverage for pipeline runtime and expression logic. These changes ensure consistent behavior across platforms and improve the robustness of the pipeline parser and executor. Highlights
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. Footnotes
|
There was a problem hiding this comment.
Code Review
This pull request aligns the Android Firestore pipeline implementation with iOS, resolving several bridge parity gaps (P-005 through P-012). Key updates include parsing and coercing stage option fields (like distanceField and indexField) as expressions, implementing strict arity validation for timestampTruncate, and introducing ExpressionCoercionMode to handle numeric and comparison operand coercion (such as converting booleans to 0/1 for arithmetic). The changes are accompanied by comprehensive unit and e2e tests. The review feedback correctly identifies two high-severity issues in ReactNativeFirebaseFirestorePipelineNodeBuilder.java: first, numeric operand coercion is incorrectly restricted to arguments after the first index in arithmetic functions; second, nested constant maps containing booleans bypass coercion because the boolean check is performed before resolving the constant value.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #9086 +/- ##
============================================
+ Coverage 57.38% 57.95% +0.57%
- Complexity 1529 1563 +34
============================================
Files 503 503
Lines 38490 38574 +84
Branches 5666 5655 -11
============================================
+ Hits 22085 22352 +267
+ Misses 15025 14778 -247
- Partials 1380 1444 +64
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
98efacc to
4da576e
Compare
|
Bugbot is not enabled for this team, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
…wering on Android
Add seven targeted e2e probes for live Android Executor coerce and validation branches; Jacoco 58%→60.94%. Remaining missed lines skew dead-code — defer to Phase Q.
Cover remaining pipeline_validate.ts branch guards via direct Jest calls; 100% line coverage. Unreachable validateSource default-param branch deferred to Phase Q audit.
…code Delete uncalled readableMap helpers, applyPrimitiveRawOptions, and applyUnionStage paths superseded by buildNativePipeline; document remaining intractable coverage caps in the work queue.
Unnest/findNearest use coerceStageOptionFieldName; defer limit/offset numeric validation to bridge factory so Phase R native executor e2e passes.
Record 3-platform full-tier green after iOS stage option coercion fix.
Update snapshot table with iOS NodeBuilder 69.10% and operand-mode delta.
Record Phase A→R deltas for eventual PR 9086 comment; queue static pre-merge checks.
Static pre-merge validation green; branch ready for PR 9086 push.
4da576e to
a860457
Compare
|
Bugbot is not enabled for this team, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
Description
Firestore Pipelines native gap analysis remediation — platform parity (Phase J), coverage expansion (K–Q), and pre-merge full-harness validation (Phase R). Tracker: pipeline coverage work queue.
new-architecture; merge after TurboModule migration lands.Bugs found & fixed
indexField, findNearest non-fielddistanceFieldexpressions, and limit/offset numeric validation now match Android (coerceStageOptionFieldName; defer limit/offset to bridge factory).integerLiterallowering, stage option expression fields, constant envelope routing,timestampTruncatearity.Coverage (Phase A baseline → Phase R full tier)
E2e: macOS 698/0 · iOS 838/0 · Android 866/0 passing (full harness, no narrowing).
pipeline_runtime.tsexpressions.tspipeline_validate.tsAlso: −238 lines dead Android Executor code removed (Phase Q intractability audit); compare-types 19/19 documented; Jest 1146/1146 green.
Related issues
Release Summary
Firestore Pipelines: Android and iOS native bridge parity fixes, expanded pipeline e2e and TS/native coverage, dead-code removal in Android Executor lowering.
Checklist
AndroidiOSOther(macOS, web)e2etests added or updated inpackages/**/e2ejesttests added or updated inpackages/**/__tests__Test Plan
:test-cover(698 / 838 / 866 passing)yarn compare:types— firestore + firestore-pipelines documentedyarn tests:jest— 1146 testsyarn tsc:compile,yarn tsc:compile:consumer,yarn reference:apiyarn lint:js,yarn lint:android,yarn lint:ios:check